Parallel Braings - Параллельные Мозги - Лабораторная 2

Семинары по параллельному программированию

Рыбинск, РГАТА 2007

Список семинаров Форум Ссылки

Лабораторная работа №2
Многопоточное программирование. Threading in C#

Задача #1 - TimeSerial Calls

Краткое описание:
Пусть имеется N независимых функций fi и N положительных чисел Ti, которые мы будем называть периодами. Продолжительность работы i-ой функции составляет ti. ti может быть как больше, так и меньше Ti. Необходимо организовать G вызовов функции fi с периодом Ti. Вычислить оценку мат.ожидания и дисперсию времени вызова каждой функции, а также максимальное и минимальное отклонение времени вызова функции от заданного периода.
p.s. Для замеров времени Вы можете использовать Utility.PerfCounter или System.DateTime.Now;

Неформальное описание:
Некоторые программные действия (функции) мы хотели бы запускать периодически с фиксированным временным интервалом T, что весьма напоминает действия в аппаратной реализации, которые должны быть выполнены по каждому импульсу синхронизирующей последовательности.
Простейшая реализация (для одной функции) могла бы выглядеть так:

  ...
  while(true){
    delay(T);
    func();
  }
Интересно, что подобная задача является классической задачей для систем реального времени, в частности рассмотрение данной задачи приводиться в книге [1]. Там же приводиться следующее решение для ОС QNX (t3.cc). Авторы [1] запускают три функции соответственно с периодами {317,171,77}, вычисляют статистику вызовов и получают следующие результаты:
Временные характеристики решения [1] (msec)
in
(число выполненных вызовов)
M~(T)[min...max]D~(T)
132316.919[316.867...317.895]~0.178511
259170.955[168.583...173.296]~0.92472
313276.979[76.942...77.952]~0.085977
Как вы можете видеть, наблюдается достаточно высокая точность выдержки периода синхронизации.

Содержание отчета к л.р.:

  1. Исходный код программы (или нескольких версий программы)
  2. Таблица стат.обработанных временных замеров
  3. Результаты сравнения ОС QNX и ОС Windows

Возможные ошибки:

Не-threadsafe подсчет статистики выполнения: иногда при подсчете оценок параметров не учитывается возможность параллельного обновления значений этих оценок, что приводит к ошибкам и некорректным данным.

[1] Цилюрик О., Горошко Е. QNX/UNIX: анатомия параллелизма. - СПб.: Символ-Плюс, 2006

QNX vs Windows


Сравнение ОС Windows и OC QNX представляется не совсем корректным, поскольку данные ОС принадлежат к разным классам ОС (NonRTS и RTS) и семействам ОС (Windows-way и Unix-way).

Но дело не только в различии API (так QNX API является POSIX, а WinAPI нет), дело ещё и в кардинальных архитектурных различиях.
Так в частности в QNX программист может изменить значения самого кванта времени, который планировщик отдает потоку на исполнение. Может изменить дисциплину диспетчеризации потоков.
Кроме того отличительной чертой QNX являются сигналы реального времени - по сути дела высокоуровневые обработчики событий (прерываний), которые могут вытеснить даже исполняющиеся функции ядра системы - в Windows же вытеснение исполняющихся функций ядра не возможно в принципе.

Сайт создан в системе uCoz